
        <html>
			<head>
			     <title>OsmocomBB SMS Sniffer - 绿盟科技</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/11955">http://drops.wooyun.org/tips/11955</a></h1>
				
      <p>
        <p><strong>Author:绿盟科技博客</strong></p>

<h1>0x00 简介</h1>

<hr />

<p><img src="http://static.wooyun.org//drops/20160106/201601061509223274513.jpg" alt="p1" /></p>

<p>OsmocomBB(Open source mobile communication Baseband)是国外一个开源项目，是GSM协议栈(Protocols stack)的开源实现。其目的是要实现手机端从物理层(layer1)到layer3的三层实现，主要进行2G网短信嗅探。本文详细地介绍了实现方法，以供安全爱好者学习和参考。</p>

<!--more-->

<p>目前来看，真正的物理层(physical layer)并没有真正的开源实现，暂时也没看到实施计划。只有物理层控制。因为真正的物理层是运行在baseband processor的DSP core上,涉及到许多信号处理算法的实现，而且还要牵扯很多硬件RF的东西。这项技术至少在2010年，技术已经成熟，2011年就有开源实现了。得益于OsmocomBB 的开源项目，使得我们用一台笔记本和很简单的硬件就能完成GSM sms嗅探。</p>

<h1>0x01 原理分析</h1>

<hr />

<h3>关于加密</h3>

<p>GSM加密采用A5算法。A5算法1989年由法国人开发，是一种序列密码，它是欧洲GSM标准中规定的加密算法，专用于数字蜂窝移动电话的加密，用于对从电话到基站连接的加密。A5的特点是效率高，适合硬件上高效实现。</p>

<p>A5发展至今，有A5/1、A5/2、A5/3、A5/4、A5/5、A5/6、A5/7等7个版本，目前GSM终端一般都支持A5/1和A5/3，A5/4以上基本不涉及。值得注意的是，A5/2是被『故意弱化强度』的版本，专用于『出口』给『友邦』，2006年后被强制叫停，终端不允许支持A5/2。</p>

<h3>工作流程</h3>

<p>手机开机时的位置更新流程：</p>

<ol>
<li>MS（手机）向系统请求分配信令信道（SDCCH）；</li>
<li>MSC收到手机发来的IMSI可及消息；</li>
<li>MSC将IMSI可及信息再发送给VLR，VLR将IMSI不可及标记更新为IMSI可及；</li>
<li>VLR反馈MSC可及信息信号；</li>
<li>MSC再将反馈信号发给手机；</li>
<li>MS倾向信号强的BTS，使用哪种算法由基站决定，这也导致了可以用伪基站进行攻击。</li>
</ol>

<h3>关于GSM网络相关知识</h3>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509259746722.jpg" alt="p2" /></p>

<h1>0x02 所需硬件</h1>

<hr />

<p>支持的手机</p>

<ul>
<li>MotorolaC123/C121/C118 (E88) — our primary target</li>
<li>MotorolaC140/C139 (E86)</li>
<li>MotorolaC155 (E99) — our secondary target</li>
<li>MotorolaV171 (E68/E69)</li>
<li>SonyEricssonJ100i</li>
<li>Pirelli DP-L10</li>
<li>Neo 1973 (GTA01)</li>
<li>OpenMoko – Neo Freerunner (GTA02)</li>
<li>SciphoneDreamG2 (MT6235 based)</li>
</ul>

<p>我们选择Moto C118，因为官方支持的最好、硬件成本低，￥35/台（手机+电池+充电器）</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509262473932.jpg" alt="p3" /></p>

<h3>USB转串口模块</h3>

<p>推荐带TX/RX LED的 FT232模块,当然其他模块也可以,比如CP2102、CP2303等模块,不过使用前要先调好比特率。FT232模块，我买的是￥35的，第一个嘛，为了求稳定。后面做多个手机联合嗅探的时候可以尝试买一些便宜的。</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509284493041.jpg" alt="p4" /></p>

<h3>C118数据线</h3>

<p>这个数据线就是2.5mm耳机头转杜邦线，注意一头是2.5mm耳机孔的，另一边是杜邦线连接串口模块。手边有2.5mm耳机插头的可以自己做一个。当然网上现在也有现成的了，不过成本稍微高一点。￥15左右一条</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509293753551.jpg" alt="p5" /></p>

<h3>MiniUSB链接线</h3>

<p>这个线应该都有，以前的mp3、手机啥的都是这个线，马云家卖￥10,如果你用了Pl2303那类的USB转换板，就可以不用这根线了，那个板子上自带U口。</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509315833162.jpg" alt="p6" /></p>

<h1>0x03 编译OsmocomBB</h1>

<hr />

<h3>基础环境</h3>

<p>MacOs 10.10.5 + VMworkstation + Ubuntu 12.04 x64</p>

<p>我的实验用的是这样的环境，网上很多教程都说X64的虚拟机不能正常编译，但是我确实是成功了。也可以尝试使用别的环境试试，毕竟我的实验环境仅供参考。</p>

<p>网路环境要求能够正常访问github，实验环境周围存在GSM信号。</p>

<p>C118手机有足够的电量，支持实验。</p>

<h3>准备所需目录以及文件</h3>

<p>具体项目目录结构和所需文件如下图：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509327082671.jpg" alt="p7" /></p>

<p>准备好之后的目录如下图：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509342834181.jpg" alt="p8" /></p>

<p>我是把整个source目录放在了用户文件夹下，仅做参考。只需要按照上面文字格式的结构图准备就好，图片中未出现部分后面会写如何出现…</p>

<h3>编译环境准备</h3>

<p>编译前安装所需的依赖库文件：</p>

<pre><code>#!bash
sudo apt-get install build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev
</code></pre>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509359066791.jpg" alt="p9" /></p>

<p>在arm根目录执行build.sh文件进行build操作:</p>

<pre><code>#!bash
chmod +x gnu-arm-build.2.sh ./ gnu-arm-build.2.sh
</code></pre>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509365557810.jpg" alt="p10" /></p>

<p>完成后arm/install/目录结构如图所示：</p>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615093880127111.jpg" alt="p11" /></p>

<p>因为编译需要，把arm/install/bin路径加入到环境变量中，我这里是加入到用户的环境变量中。使用pwd命令获取绝对路径：</p>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615093987225121.jpg" alt="p12" /></p>

<p>修改<code>~/.bashrc</code>文件，最后一行加入：</p>

<pre><code>#!bash
export PATH=$PATH:/home/wooyaa/source/arm/install/bin
</code></pre>

<p>执行source命令让配置文件即时生效：</p>

<pre><code>#!bash
source ~/.bashrc
</code></pre>

<p>在终端中输入arm然后按tab键，如果出现如下图所示就说明编译环境搞定了：</p>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615094187998131.jpg" alt="p13" /></p>

<h3>编译OsmocomBB</h3>

<p>把osmocom项目gitclone到source目录下：</p>

<pre><code>#!bash
git clone git://git.osmocom.org/osmocom-bb.git git clone git://git.osmocom.org/libosmocore.git
</code></pre>

<p>在libosmocore/目录中编译osmocom核心库文件</p>

<pre><code>#!bash
cd /home/wooyaa/source/libosmocore/ autoreconf -i ./configure make sudo make install
</code></pre>

<p>编译OsmocomBB：</p>

<pre><code>#!bash
cd /home/wooyaa/source/osmocom-bb/src/ git checkout –track origin/luca/gsmmap //选择分支 make //交叉编译
</code></pre>

<p>如果没什么问题，软件环境和固件就都编译好了。</p>

<p>Ununtu 12.04自带FT232R驱动，所以直接连接就能使用，不需要再装驱动。</p>

<h3>常见错误</h3>

<p>常见报错有可能是autoconf、libtool、libpcsclite-dev等文件的缺失，只要装好就行了。具体版本请使用<code>apt-cache search xxx</code>在你自己电脑中的apt-get的list中查找。</p>

<h1>0x04 使用方法</h1>

<hr />

<h3>连接硬件</h3>

<p>在终端中输入<code>lsusb</code>,会显示当前usb连接的信息：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509432230814.jpg" alt="p14" /></p>

<p>如果驱动正常，插上MiniUSB线后就能看到usb-serial:</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509479808015.jpg" alt="p15" /></p>

<p>网上的教程大多都误认为是将firmware刷入手机，实际上这里只是把固件加载到手机RAW中执行。</p>

<h3>加载Firmware到手机raw中</h3>

<pre><code>#!bash
cd /home/wooyaa/source/osmocom-bb/src/host/osmocon/./osmocon -m c123 -p /dev/ttyUSB0 ../../target/firmware/board/compal_e88/layer1.compalram.bin
</code></pre>

<ol>
<li>其中 –m c123跟c123xor的区别就是是否检测数据总和</li>
<li>上面命令需要在关机下执行，然后短按开机键</li>
</ol>

<p>终端上会显示”starting up”字样，如下：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509481585416.jpg" alt="p16" /></p>

<p>手机屏幕显示Layer 1 osmocom-bb 字样就表示成功了：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509552798517.jpg" alt="p17" /></p>

<h3>扫描基站</h3>

<pre><code>#!bash
cd /home/wooyaa/source/osmocom-bb/src/host/layer23/src/misc/sudo ./cell_log –O
</code></pre>

<p>其中cell&#95;log的参数是字母O，具体作用是只检查ARFCN是否可用，不进行其它操作，可以用./cell&#95;log –help参看说明。</p>

<p>终端中会输出日志信息，其中会包含能够收到的基站的相关信息，格式类似这样：</p>

<pre><code>#!bash
cell_log.c:248 Cell: ARFCN=40 PWR=-61dB MCC=460 MNC=00 (China,China Mobile)
</code></pre>

<p>ARFCN后面的编号可以代表基站信道号，还包含了运营商信息。</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509568795618.jpg" alt="p18" /></p>

<h3>关于嗅探</h3>

<p>因为我们买的便宜货，每个手机只能嗅探一个信道，具体一些的，可以参考下面的图（我们现在只能抓Downlink的数据包）：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509585235119.jpg" alt="p19" /></p>

<p>因为想要Sniffer Uplink的包，要修改硬件，C118主板上的RX filters要换掉，换成我们需要的HHM1625&amp;&amp;HHM1623C1滤波器组件，才能抓Uplink的数据包。</p>

<p>有关信道号ARFCN的问题，可以参考下面的图：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061509598190420.jpg" alt="p20" /></p>

<h3>开始嗅探</h3>

<p>选择想要监听的信道号并开始嗅探广播数据。</p>

<p>在目录/home/wooyaa/source/osmocom-bb/src/host/layer23/src/misc/下执行嗅探：</p>

<pre><code>#!bash
./ccch_scan -i 127.0.0.1 -a THE_ATFCN_ID
</code></pre>

<p>其中THE&#95;ATFCN&#95;ID就是扫描到的日志中参数ARFCN的值。</p>

<p>苹果手机可以执行：3001#12345# 进入工程模式后，选择GSM Cell Environment->GSM Cell Info->GSM Serving Cell,就可以看到目前手机连接的基站ARFCN值了，应该在第二步中，也能看到这个ID存在。</p>

<p>其他手机的命令</p>

<p><code>Samsung (Android): *#0011#</code></p>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615100179943211.jpg" alt="p21" /></p>

<p>使用wireshark抓取监听数据</p>

<p>因为osmocomBB执行之后默认会在本地开启4729端口，这时候的GSM协议已经被封装上了TCP-IP，可以在本地用wireshark抓到，所以我们使用wireshark去监听4729的端口</p>

<pre><code>#!bash
sudo wireshark -k -i lo -f 'port 4729'
</code></pre>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615100223821221.jpg" alt="p22" /></p>

<p>在wireshark中过滤gsm_sms协议数据，过滤之后得到的数据里面就包含短信的明文信息。 过滤后得到的明文短信信息</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510043140223.jpg" alt="p23" /></p>

<p>SMS text就是短信的明文内容，其他git分支还支持把监听到的数据保存到cap包，然后通过脚本来过滤包内容，达到嗅探短信明文的目的。后面会有计划的去尝试。</p>

<h3>配置OsmocomBB</h3>

<p>layer23是用/home/wooyaa/source/osmocom-bb/src/host/layer23/src/mobile下的mobile程序实现,所以通过执行mobile文件可以进行自定义，配置一些关于osmocom-bb的信息。</p>

<pre><code>#!bash
cd /home/wooyaa/source/osmocom-bb/src/host/layer23/src/mobile
sudo ./mobile -i 127.0.0.1
</code></pre>

<p>执行mobile程序之后，会在本地开启4247端口，使用telnet连接，然后配置执行，随时使用？来查看help信息。</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510059118724.jpg" alt="p24" /></p>

<h3>关于嗅探内容</h3>

<p>简单来讲，短信接受者的号码、IMEI等数据，只有在”Location Update”时才会在网络中出现，并且是以加密形式传输的。当接收短信时，基站根据之前位置更新时注册的信息，判断接收者的位置。所以，想要拿到接受者的号码，需要破解A5/1算法并还原出”Location Update”时的原文。</p>

<p>只不过需要价格昂贵的USRP2…</p>

<p>另外还看到个RTL-SDR的文章（就是以前传说中可以跟踪飞机的电视棒），也支持Airprobe：</p>

<p><a href="http://www.rtl-sdr.com/rtl-sdr-tutor…and-wireshark/">http://www.rtl-sdr.com/rtl-sdr-tutor…and-wireshark/</a></p>

<h3>Tips</h3>

<ol>
<li>记住所有操作在<code>sudo -s root</code>权限下操作。</li>
<li>开机键不是长按，而是短按，否则就进入原系统了。</li>
<li>现在2G短信越来越少了，多等等会有的。理论上话音一样能够被监听及解码，只是涉及技术更为复杂。</li>
<li>CP210x的接线，RX和TX有可能需要对调。运行cp210x-program需要先安装ibusb-dev，如果输出是“No devices found”或“Unable to send request, 3709 result=-110”，则有问题。</li>
</ol>

<h1>0x05 后期计划</h1>

<hr />

<h3>捕获上行包</h3>

<p>因为想要嗅探Uplink的包，要修改硬件，C118主板上的RX filters要换掉，换成我们需要的HHM1625&amp;&amp;HHM1623C1滤波器组件，才能抓Uplink的数据包。修改方法如下：</p>

<p>要使手机能够成为『passive uplink sniffer』，必须动到电烙铁，替换掉RX filters。</p>

<p>替换前：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510075446825.jpg" alt="p25" /></p>

<p>摘掉后：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510084834526.jpg" alt="p26" /></p>

<p>替换后：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510105997627.jpg" alt="p27" /></p>

<p>使用OsmocomBB RSSI monitor查看信号强弱：</p>

<pre><code>#!bash
./osmocom-bb/src/host/osmocon/osmocon -p /dev/ttyUSB0 -m c123xor -c ./osmocom-
bb/src/target/firmware/board/compal_e88/rssi.highram.bin ./osmocom-
bb/src/target/firmware/board/compal_e88/chainload.compalram.bin
</code></pre>

<p>由于RSSI太大，不便于像OsmocomBB那样直接加载，所以要先用-C参数加载一个小的chainloader程序去加载我们真正的RSSI Payload程序：</p>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510126793728.jpg" alt="p28" /></p>

<h3>短信内容实时web页面展示</h3>

<p>制作成绵羊墙，在线实时显示嗅探到的短信</p>

<h3>多设备联合嗅探</h3>

<p>尝试多设备一起嗅探，增强嗅探范围和效果</p>

<h1>0x06 附录</h1>

<hr />

<h3>DIY Moto C118数据链接线</h3>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510142955129.jpg" alt="p29" /></p>

<p>图中例子耳机为moto T191的耳机，右图中标注的颜色为耳机线拆开后里面线芯的颜色。耳机线拆开后里面会包含3根带有外皮的铜线。</p>

<h3>GSM网络相关知识</h3>

<p><img src="http://static.wooyun.org//drops/20160106/201601061510168229630.jpg" alt="p30" /></p>

<p>从协议图中得知，移动设备(MS)和基站(BTS)间使用Um接口，最底层就是刷入手机的<strong>layer1物理传输层</strong>，之上分别是<strong>layer2数据链路层和layer3网络层</strong>。</p>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615101796855311.jpg" alt="p31" /></p>

<p>位于图中layer2的LAPDm，是一种保证数据传输不会出错的协议。一个LAPDm帧共有23个字节（184个比特），提供分片管理控制等功能。</p>

<p>layer3的协议则可以分为RR/MM/CM三种，这里只列出嗅探相关的功能：</p>

<ul>
<li>RR(Radio Resource Management)：channel, cell（控制等信息，可以忽略）</li>
<li>MM(Mobility Management)：Location updating（如果需要接收方号码，需要关注这个动作）</li>
<li>CM(Connection Management)：Call Control（语音通话时的控制信息，可以知道何时开始捕获TCH）, SMS（这里的重点）</li>
</ul>

<p><img src="http://static.wooyun.org//drops/20160106/2016010615101984823321.jpg" alt="p32" /></p>

<p>参考GSM的文档 TS 04.06 得知 LAPDm 的Address field字段中，定义了 3.3.3 Service access point identifier (SAPI)。SAPI=3就是我们要的Short message service。 使用tcpdump配合show&#95;gsmtap&#95;sms.py脚本在console列出短信明文。</p>

<pre><code>#!bash
tcpdump -l -ilo -nXs0 udp and port 4729 | python2 -u show_gsmtap_sms.py
</code></pre>

<h3>一些名词解释</h3>

<ul>
<li>MS：Mobile Station，移动终端；</li>
<li>IMSI：International Mobile Subscriber Identity，国际移动用户标识号，是TD系统分给用户的唯一标识号，它存储在SIM卡、HLR/VLR中，最多由15个数字组成；</li>
<li>MCC：Mobile Country Code，是移动用户的国家号，中国是460；</li>
<li>MNC：Mobile Network Code ，是移动用户的所属PLMN网号，中国移动为00、02，中国联通为01；</li>
<li>MSIN：Mobile Subscriber Identification Number，是移动用户标识；</li>
<li>NMSI：National Mobile Subscriber Identification，是在某一国家内MS唯一的识别码；</li>
<li>BTS：Base Transceiver Station，基站收发器；</li>
<li>BSC：Base Station Controller，基站控制器；</li>
<li>MSC：Mobile Switching Center，移动交换中心。移动网络完成呼叫连接、过区切换控制、无线信道管理等功能的设备，同时也是移动网与公用电话交换网(PSTN)、综合业务数字网(ISDN)等固定网的接口设备；</li>
<li>HLR：Home location register。保存用户的基本信息，如你的SIM的卡号、手机号码、签约信息等，和动态信息，如当前的位置、是否已经关机等；</li>
<li>VLR：Visiting location register，保存的是用户的动态信息和状态信息，以及从HLR下载的用户的签约信息；</li>
<li>CCCH：Common Control CHannel，公共控制信道。是一种“一点对多点”的双向控制信道，其用途是在呼叫接续阶段，传输链路连接所需要的控制信令与信息。 </li>
</ul>

<p><strong>参考文献</strong></p>

<ul>
<li><a href="https://github.com/osmocom/osmocom-bb">https://github.com/osmocom/osmocom-bb</a></li>
<li><a href="http://bb.osmocom.org/trac/wiki/TitleIndex">http://bb.osmocom.org/trac/wiki/TitleIndex</a></li>
<li><a href="http://wulujia.com/2013/11/10/OsmocomBB-Guide/">http://wulujia.com/2013/11/10/OsmocomBB-Guide/</a></li>
<li><a href="https://blog.hqcodeshop.fi/archives/253-iPhone-cell-Field-Test-mode.html">https://blog.hqcodeshop.fi/archives/253-iPhone-cell-Field-Test-mode.html</a></li>
<li><a href="http://bbs.pediy.com/showthread.php?t=182574">http://bbs.pediy.com/showthread.php?t=182574</a></li>
<li><a href="http://www.blogjava.net/baicker/archive/2013/11/13/406293.html">http://www.blogjava.net/baicker/archive/2013/11/13/406293.html</a></li>
</ul>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          